//package com.wayin.common.utils;
//
//import com.github.pagehelper.Page;
//import com.github.pagehelper.PageInfo;
//import com.google.common.collect.Lists;
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.AllArgsConstructor;
//import lombok.Builder;
//import lombok.Data;
//import lombok.NoArgsConstructor;
//import org.springframework.beans.BeanUtils;
//import org.springframework.util.CollectionUtils;
//
//import java.util.List;
//
///**
// * @desc 分页VO对象
// */
//@ApiModel("分页对象")
//@Builder
//@Data
//@AllArgsConstructor
//@NoArgsConstructor
//public class PageVO<T> {
//
//    private static final long serialVersionUID = -4426958360243585882L;
//
//    @ApiModelProperty(value = "当前页号")
//    private int pageNum;
//
//    @ApiModelProperty(value = "每页的数量")
//    private int pageSize;
//
//    @ApiModelProperty(value = "总记录数")
//    private long total;
//
//    @ApiModelProperty(value = "总页数")
//    private int pages;
//
//    @ApiModelProperty(value = "结果集")
//    private List<T> list;
//
//    public PageVO(PageQO pageQO) {
//        this.setPageNum(pageQO.getPageNum());
//        this.setPageSize(pageQO.getPageSize());
//    }
//
//    public PageVO(List<T> poList) {
//        BeanUtils.copyProperties(new PageInfo<>(poList), this);
//    }
//
//    public static <T> PageVO<T> build(List<T> poList) {
//        return new PageVO<>(poList);
//    }
//
//    /**
//     * @desc 构建一个分页VO对象
//     *
//     * @param page 数据库查出来的分页数据列表
//     */
//    public static <T> PageVO<T> build(Page<T> page) {
//        PageVO<T> pageVO = new PageVO<>();
//        BeanUtils.copyProperties(page.toPageInfo(), pageVO);
//        return pageVO;
//    }
//
//    /**
//     * @desc 构建一个分页VO对象
//     * 试用场景为：从数据库取出的PO列表不做任何处理，转化为VO列表返回
//     * @param page 数据库查出来的分页数据列表
//     * @param voClazz 要转为的VO类
//     */
//    public static <T, E> PageVO<T> build(Page<E> page, Class<T> voClazz) {
//        PageVO<T> pageVO = new PageVO<>();
//        BeanUtils.copyProperties(page, pageVO, "list");
//        try {
//            List<T> VOs = Lists.newArrayList();
//            List<E> POs = page.getResult();
//            if (!CollectionUtils.isEmpty(POs)) {
//                for (E e : POs) {
//                    T t = voClazz.newInstance();
//                    BeanUtils.copyProperties(e, t);
//                    VOs.add(t);
//                }
//            }
//            pageVO.setList(VOs);
//        } catch (IllegalAccessException | InstantiationException e) {
//            throw new RuntimeException(e);
//        }
//        return pageVO;
//    }
//
//    public int getPageNum() {
//        return pageNum;
//    }
//
//    public void setPageNum(int pageNum) {
//        this.pageNum = pageNum;
//    }
//
//    public int getPageSize() {
//        return pageSize;
//    }
//
//    public void setPageSize(int pageSize) {
//        this.pageSize = pageSize;
//    }
//
//    public long getTotal() {
//        return total;
//    }
//
//    public void setTotal(long total) {
//        this.total = total;
//    }
//
//    public int getPages() {
//        return pages;
//    }
//
//    public void setPages(int pages) {
//        this.pages = pages;
//    }
//
//    public List<T> getList() {
//        return list;
//    }
//
//    public void setList(List<T> list) {
//        this.list = list;
//    }
//}